package com.xianggu.redis;


import redis.clients.jedis.Jedis;

import java.util.Collections;

public class RedisConnection {

    private Jedis jedis;

    // 构造函数，用于创建Jedis连接
    public RedisConnection(String host, int port) {
        try {
            jedis = new Jedis(host, port);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 关闭Jedis连接
    public void close() {
        if (jedis!= null) {
            jedis.close();
        }
    }

    // 设置键值对
    public void set(String key, String value) {
        jedis.set(key, value);
    }

    // 获取键对应的值
    public String get(String key) {
        return jedis.get(key);
    }

    // 判断键是否存在
    public boolean exists(String key) {
        return jedis.exists(key);
    }

    // 删除键
    public long del(String key) {
        return jedis.del(key);
    }

    // 递增键对应的值（如果值为数字类型）
    public long incr(String key) {
        return jedis.incr(key);
    }

    // 递减键对应的值（如果值为数字类型）
    public long decr(String key) {
        return jedis.decr(key);
    }

    // 设置键的过期时间（以秒为单位）
    public void expire(String key, int seconds) {
        jedis.expire(key, seconds);
    }

    private static final String LUA_SCRIPT =
            "local current = redis.call('INCR', KEYS[1])\n" +
                    "if current == 1 then\n" +
                    "    redis.call('EXPIRE', KEYS[1], ARGV[1])\n" +
                    "end\n" +
                    "return current";

    public Long incrWithExpire(String key, int expireSeconds) {
        // 执行Lua脚本（原子性操作）
        return (Long) jedis.eval(
                LUA_SCRIPT,
                Collections.singletonList(key),
                Collections.singletonList(String.valueOf(expireSeconds))
        );
    }
}